  public void addEdge(String x, String y, String r){
    int e = parseString(r);
    // System.out.println("AdjMatrix.addEdge r = " +
    // 		       transTable.toString(e) + "| " + transTable.getIndex(e));
    addNode(x);
    addNode(y);
    int i = symbolTable.getIndex(x);
    int j = symbolTable.getIndex(y);
    Relation relation = new Relation();
    relation.i = i;
    relation.j = j;
    relation.r = e;
    // System.out.println("AdjMatrix.addEdge: Relation i = " + i + " j = " + j +
// " r = " + e);
    int s = transTable.intersection(relation.r, matrix[i][j]);
    if (isProperSubset(s, matrix[i][j])){
	relation.r = s;
       toAdd(relation);
    }
    Relation inverseRelation = new Relation();
    inverseRelation.i = j;
    inverseRelation.j = i;
    inverseRelation.r = getInverseConstraints(e);
    int t = transTable.intersection(inverseRelation.r, matrix[j][i]);
    if (isProperSubset(t, matrix[j][i])){
       inverseRelation.r = t;
       toAdd(inverseRelation);
    }
  }




  public void addEdge(String x, String y, String r){
    int e = parseString(r);
    // System.out.println("AdjMatrix.addEdge r = " +
    //                 transTable.toString(e) + "| " + transTable.getIndex(e));
    addNode(x);
    addNode(y);
    int i = symbolTable.getIndex(x);
    int j = symbolTable.getIndex(y);
    Relation relation = new Relation();
    relation.i = i;
    relation.j = j;
    relation.r = e;
    // System.out.println("AdjMatrix.addEdge: Relation i = " + i + " j = " + j +
// " r = " + e);
    int s = transTable.intersection(relation.r, matrix[i][j]);
    if (isProperSubset(s, matrix[i][j])){
        relation.r = s;
        toAdd(relation);

        Relation inverseRelation = new Relation();
        inverseRelation.i = j;
        inverseRelation.j = i;
        inverseRelation.r = getInverseConstraints(s);
        /*int t = transTable.intersection(inverseRelation.r, matrix[j][i]);
        if (isProperSubset(t, matrix[j][i])){
        inverseRelation.r = t;*/
       toAdd(inverseRelation);
    }
  }
